import { serverUrl } from '@/config';
import { getToken } from './auth';
import { logout, throttle } from './utils';

// 到登录页
const goLogout = throttle(() => {
	logout();
	// 登录页路径
	const loginUrl = '/pages/login/login/login';
	const pages = getCurrentPages();
	const currentPage = pages[pages.length - 1];
	// 如果当前页面为登录页，禁止再跳转
	if (currentPage && currentPage.route === loginUrl) return;
	// 关闭所有页面返回到登录页
	uni.reLaunch({ url: loginUrl });
}, 200);

function request(options: any = {}) {
	if (!options.url.includes('http')) {
		options.url = `${serverUrl}${options.url}`;
	}
	// 判断本地是否存在token，如果存在则带上请求头
	if (getToken()) {
		options.header = {
			'content-type': 'application/json',
			'Authorization': `${getToken()}`,
		};
	}

	return new Promise((resolved) => {
		options.success = (res: any) => {
			if (res.data.status === 404) {
				resolved(res);
			} else if (res.data.code !== 200) { // 如果请求回来的状态码不是200则执行以下操作
				// 登陆失效
				if (res.data.code === 401) {
					goLogout();
					setTimeout(() => {
						uni.showToast({
							title: '登录失效',
							icon: 'error',
						});
					}, 1000);
				} else {
					// 非成功状态码弹窗
					setTimeout(() =>  uni.$u.toast(res.data.msg), 1000);
				}
				// 返回错误信息
				resolved(res.data);
			} else {
				// 请求回来的状态码为200则返回内容
				resolved(res.data)
			}
		};
		options.fail = (err: any) => {
			// 请求失败弹窗
			setTimeout(() => {
				uni.$u.toast('服务器错误,请稍后再试');
				resolved(err);
			}, 1000)
		};
		uni.request(options);
	});
}

export default request;
